﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using com.creditos.be.liclSolcred;

namespace com.creditos.dao.sql.liclSolcred
{
    public class SolicitudDAO
    {

        public static double GuardarSolicitud(SolicitudBE oSolicitudBE)
        {
            Comando cmd = new Comando();
            cmd.CommandName = "PRC_ActualizarSolicitudCreditoPrestamo";
            cmd.AddParameter("@Accion", oSolicitudBE.Accion);
            cmd.AddParameter("@solNroSolicitud", oSolicitudBE.NumeroSolicitud);
            //cmd.AddParameter("@solFecIngreso", oSolicitudBE.FechaIngreso);//es necesario enviar?
            cmd.AddParameter("@solCodTipoPersona", oSolicitudBE.TipoPersona);// se repite ?
            cmd.AddParameter("@solCodTipoCanalVenta", oSolicitudBE.TipoCanalVenta);
            cmd.AddParameter("@solCodCanalVenta", oSolicitudBE.CanalVenta);
            cmd.AddParameter("@solCodRepresentanteVenta", oSolicitudBE.Promotor); 
            cmd.AddParameter("@solCodAgencia", oSolicitudBE.Agencia);
            cmd.AddParameter("@solTipDocumento", oSolicitudBE.TipoDocumento);
            cmd.AddParameter("@solNroDocumento", oSolicitudBE.NumeroDocumento);
            cmd.AddParameter("@solCodProducto", oSolicitudBE.CodigoProducto);
            cmd.AddParameter("@solCodSubProducto", oSolicitudBE.CodigoSubProducto);
            cmd.AddParameter("@solCodTipoEmpleo", oSolicitudBE.TipoEmpleo);
            cmd.AddParameter("@solCodGerenteAgencia", oSolicitudBE.CodigoJefeAgencia); 
            cmd.AddParameter("@solCodFuncionarioNegocio", oSolicitudBE.CodigoFuncionario); 
            cmd.AddParameter("@solCodResponsableDepsa", oSolicitudBE.CodigoResponsableDEPSA);
            cmd.AddParameter("@solCodUsuarioRegistro", oSolicitudBE.UsuarioRegistro);
            cmd.AddParameter("@solCodAnalistaCredito", oSolicitudBE.Analista);
            cmd.AddParameter("@solDesObservacion", oSolicitudBE.ObservacionesSolicitudes);
            #region Integrante resumen
            cmd.AddParameter("@intTipIntegrante", 1);
            cmd.AddParameter("@intTipDocumento", oSolicitudBE.TipoDocumento);
            cmd.AddParameter("@intNroDocumento", oSolicitudBE.NumeroDocumento);
            cmd.AddParameter("@intCodTipoPersona", oSolicitudBE.TipoPersona);
            //cmd.AddParameter("@intNomDescripcion", oSolicitudBE.CapacidadCredito);
            #endregion
            #region Integrante Persona Natural
            cmd.AddParameter("@ipnApePaterno", oSolicitudBE.ApellidoPaterno);
            cmd.AddParameter("@ipnApeMaterno", oSolicitudBE.ApellidoMaterno);
            cmd.AddParameter("@ipnApeCasado", oSolicitudBE.ApellidoCasada);
            cmd.AddParameter("@ipnNom1", oSolicitudBE.PrimerNombre);
            cmd.AddParameter("@ipnNom2", oSolicitudBE.SegundoNombre);
            cmd.AddParameter("@ipnCodNacionalidad", oSolicitudBE.Nacionalidad);
            cmd.AddParameter("@ipnCodSexo", oSolicitudBE.Sexo);
            cmd.AddParameter("@ipnCodEstadoCivil", oSolicitudBE.EstadoCivil);
            cmd.AddParameter("@ipnCodGradoInstruccion", oSolicitudBE.GradoInstruccion);
            cmd.AddParameter("@ipnFecNacimiento", oSolicitudBE.FechaNacimiento);
            cmd.AddParameter("@ipnCodDepartamento", oSolicitudBE.CodigoDepartamento);
            cmd.AddParameter("@ipnCodProvincia", oSolicitudBE.CodigoProvincia);
            cmd.AddParameter("@ipnCodDistrito", oSolicitudBE.CodigoDistrito);
            cmd.AddParameter("@ipnDesDireccion", oSolicitudBE.DireccionDomicilio);
            cmd.AddParameter("@ipnDesDireccionReferencia", oSolicitudBE.ReferenciaDomicilio);
            cmd.AddParameter("@ipnDesCorreoElectronico", oSolicitudBE.Email1);
            cmd.AddParameter("@ipnNroTelefonoFijo", oSolicitudBE.TelefonoFijo);
            cmd.AddParameter("@ipnNroTelefonoMovil", oSolicitudBE.TelefonoMovil);
            cmd.AddParameter("@ipnCodCorrespondencia", oSolicitudBE.DireccionCorrespondencia);
            cmd.AddParameter("@ipnCodTiempoResidencia", oSolicitudBE.TiempoResidencia);
            cmd.AddParameter("@ipnCodTipoVivienda", oSolicitudBE.TipoVivienda);
            cmd.AddParameter("@ipnNroDependientes", oSolicitudBE.NumeroDependientes);
            cmd.AddParameter("@ipnCodProfesion", oSolicitudBE.Profesion);
            cmd.AddParameter("@ipnImpPatrimonioCasa", oSolicitudBE.PatrimonioInmuebles);
            cmd.AddParameter("@ipnImpPatrimonioAuto", oSolicitudBE.PatrimonioAutos);
            cmd.AddParameter("@ipnImpPatrimonioOtro", oSolicitudBE.PatrimonioOtros);
            #endregion
            #region Integrante Persona Juridica
            cmd.AddParameter("@ipjNroRUC", oSolicitudBE.RUC);
            cmd.AddParameter("@ipjDesRazonSocial", oSolicitudBE.RazonSocial);
            cmd.AddParameter("@ipjDesDireccion", oSolicitudBE.DireccionLaboral);
            cmd.AddParameter("@ipjDesDireccionReferencia", oSolicitudBE.ReferenciaDireccionLaboral);
            cmd.AddParameter("@ipjDesCorreoElectronico", oSolicitudBE.Email2);
            cmd.AddParameter("@ipjCodDepartamento", oSolicitudBE.CodigoDepartamentoJ);
            cmd.AddParameter("@ipjCodProvincia", oSolicitudBE.CodigoProvinciaJ);
            cmd.AddParameter("@ipjCodDistrito", oSolicitudBE.CodigoDistritoJ);
            cmd.AddParameter("@ipjNroTelefonoFijo", oSolicitudBE.TelefonoLaboral);
            cmd.AddParameter("@ipjNroTelefonoFax", oSolicitudBE.FaxLaboral);
            cmd.AddParameter("@ipjFecIngreso", oSolicitudBE.FechaIngresoLaboral);
            cmd.AddParameter("@ipjCodTiempoEmpleoAnterior", oSolicitudBE.TiempoEmpleo);
            cmd.AddParameter("@ipjCodCargo", oSolicitudBE.Cargo);
            cmd.AddParameter("@ipjCodPosicion", oSolicitudBE.Posicion);
            cmd.AddParameter("@ipjCodCiiuGrupo", oSolicitudBE.CIIUGrupo);
            cmd.AddParameter("@ipjCodCiiuActividad", oSolicitudBE.CIIUActividad);
            cmd.AddParameter("@ipjImpIngresoTitular", oSolicitudBE.IngresosTitular);
            cmd.AddParameter("@ipjImpIngresoConyuge", oSolicitudBE.IngresosConyuge);
            cmd.AddParameter("@ipjImpIngresoOtros", oSolicitudBE.IngresosOtros);
            cmd.AddParameter("@ipjCodRegimenLaboral", oSolicitudBE.RegimenLaboral);
            cmd.AddParameter("@ipjCodTipoActividad", oSolicitudBE.TipoActividad);
            cmd.AddParameter("@ipjCodTipoLocal", oSolicitudBE.TipoLocal);
            cmd.AddParameter("@ipjCodGiroNegocio", oSolicitudBE.GiroNegocio);
            //cmd.AddParameter("@ipjNroLocalPropio", oSolicitudBE);indicar valor
            #endregion
            #region Solicitud Credito Solicitado
            cmd.AddParameter("@csoCodMoneda", oSolicitudBE.MonedaCredito);
            cmd.AddParameter("@csoImpSolicitado", oSolicitudBE.ImporteCredito);
            cmd.AddParameter("@csoNroPlazoSolicitado", oSolicitudBE.Plazo);
            cmd.AddParameter("@csoImpTasaSolicitada", oSolicitudBE.ImporteTasa);
            cmd.AddParameter("@csoImpCuotaSolicitado", oSolicitudBE.ImporteCuota);
            cmd.AddParameter("@csoImpAprobado", oSolicitudBE.ImporteAprobado);
            cmd.AddParameter("@csoNroPlazoAprobado", oSolicitudBE.PlazoAprobado);
            cmd.AddParameter("@csoImpTasaAprobada", oSolicitudBE.ImporteTasaAprobada);
            cmd.AddParameter("@csoImpCuotaAprobado", oSolicitudBE.ImporteCuotaAprobada);
            cmd.AddParameter("@csoFecVencimiento1", oSolicitudBE.FechaPrimerVencimiento);
            cmd.AddParameter("@csoNroCuentaAbono", oSolicitudBE.CuentaAbono);
            cmd.AddParameter("@csoNroCuentaCargo", oSolicitudBE.CuentaCargo);
            #endregion
            #region Solicitud Credito Solicitado
            cmd.AddParameter("@cspFlgConvenio", oSolicitudBE.FlagConvenio);
            cmd.AddParameter("@cspFlgSeguroDesempleo", oSolicitudBE.SeguroDesempleo);
            cmd.AddParameter("@cspFlgCuotaDoble", oSolicitudBE.CuotasDobles);
            cmd.AddParameter("@cspFlgTipoCalculo", oSolicitudBE.TipoCalculo);
            cmd.AddParameter("@cspFlgFinanciaGAT", oSolicitudBE.FinanciaGAT);
            cmd.AddParameter("@cspFlgEnfermedadPrexistente", oSolicitudBE.FlagEnfermedadesPreExistentes);
            cmd.AddParameter("@cspFlgTipoVencimiento", oSolicitudBE.TipoVencimiento);
            cmd.AddParameter("@cspFlgAplicaCEG", oSolicitudBE.AplicaSEG);
            cmd.AddParameter("@cspCodConvenio", oSolicitudBE.CodigoConvenio);
            cmd.AddParameter("@cspCodTipoCuotaDoble", oSolicitudBE.TipoCuotaDoble);
            cmd.AddParameter("@cspCodDesgravamen", oSolicitudBE.CodigoDesgravamen);
            cmd.AddParameter("@cspDesDesgravamen", oSolicitudBE.DescripcionDesgravamen);
            cmd.AddParameter("@cspValCuotaDoble", oSolicitudBE.ImporteCuotaDoble);
            cmd.AddParameter("@cspValGAT", oSolicitudBE.ImporteValorGAT);
            cmd.AddParameter("@cspValDesgravamen", oSolicitudBE.ValorDesgravamen);
            cmd.AddParameter("@cspValSeguroDesgravamen", oSolicitudBE.ValorSeguroDesgravamen);
            #endregion

            List<SolicitudBE> lstSolicitud = (List<SolicitudBE>)ElManager.EjecutarStore<SolicitudBE>(cmd, DataBase.CREDITO_WEB);
            double nroSolicitud = 0;
            if (oSolicitudBE.Accion == 1)
            {                
                if (lstSolicitud.Count > 0)
                {
                    nroSolicitud = lstSolicitud[0].NumeroSolicitud;
                }
            }
            else {                
                nroSolicitud = oSolicitudBE.NumeroSolicitud;                           
            }
            return nroSolicitud;
        }

        public static SolicitudBE BuscarSolicitudxNumero(SolicitudBE oSolicitudBE)
        {
            List<SolicitudBE> lst = new List<SolicitudBE>();
            Comando cmd = new Comando();
            cmd.CommandName = "PRC_ObtenerSolicitudPorNumeroSolicitud";
            cmd.AddParameter("@TipoSolicitud", 2);
            cmd.AddParameter("@solNroSolicitud", oSolicitudBE.NumeroSolicitud);

            lst = (List<SolicitudBE>)ElManager.EjecutarStore<SolicitudBE>(cmd, DataBase.CREDITO_WEB);

            SolicitudBE oSolicitudEncontrada = new SolicitudBE();
            oSolicitudEncontrada = lst.Count > 0 ? lst[0] : oSolicitudEncontrada;
            return oSolicitudEncontrada;
        }

        public static int NumeroSolicitudesRegistradas(ClienteBE oClienteBE)
        {
            Comando cmd = new Comando();
            cmd.CommandName = "PRC_ObtenerSolicitudesVigentesCliente";
            cmd.AddParameter("@TipoDocumento", oClienteBE.TipoDocumento);
            cmd.AddParameter("@NumeroDocumento", oClienteBE.NumeroDocumento);

            List<SolicitudBE> lst = (List<SolicitudBE>)ElManager.EjecutarStore<SolicitudBE>(cmd, DataBase.CREDITO_WEB);

           int numeroSolicitudes = 0;
            numeroSolicitudes = lst[0].TotalSolicitudVigente;

            return numeroSolicitudes;
        }

        public static Tasa CalcularTasa(SolicitudBE oSolicitud)
        {
            List<Tasa> lst = new List<Tasa>();
            Comando cmd = new Comando();
            cmd.CommandName = "PRC_ObtenerTarifario";
            cmd.AddParameter("@tarCodProducto", oSolicitud.CodigoProducto);
            cmd.AddParameter("@tarCodSubProducto", oSolicitud.CodigoSubProducto);
             cmd.AddParameter("@tarCodMoneda", oSolicitud.MonedaCredito);
             cmd.AddParameter("@tarValImporte", oSolicitud.ImporteCredito);
             cmd.AddParameter("@tarValPlazo", oSolicitud.Plazo);
             cmd.AddParameter("@tarCodConvenio", oSolicitud.CodigoConvenio);
             cmd.AddParameter("@FlagSeguroDesempleo  ", oSolicitud.SeguroDesempleo);
             cmd.AddParameter("@FlagSeguroDesgravamen", oSolicitud.CodigoDesgravamen);
             cmd.AddParameter("@FlagComisionDesembolso", oSolicitud.FinanciaGAT);

            lst = (List<Tasa>)ElManager.EjecutarStore<Tasa>(cmd, DataBase.BANCO_WEB);

            Tasa oTasaCalculada = new Tasa();
            oTasaCalculada = lst.Count > 0 ? lst[0] : oTasaCalculada;
            return oTasaCalculada;
        }

        public static void ActualizarEstadoSolicitud(SolicitudBE oSolicitud)
        {                       
            Comando cmd = new Comando();
            cmd.CommandName = "PRC_ActualizarEstadoSolicitud";
            cmd.AddParameter("@Accion", oSolicitud.Accion);
            cmd.AddParameter("@NumeroSolicitud", oSolicitud.NumeroSolicitud);
            cmd.AddParameter("@CodigoMotivo", oSolicitud.MotivoForzar);
            cmd.AddParameter("@Comentario", oSolicitud.ObservacionesSolicitudes);
            
            ElManager.EjecutarStore<object>(cmd, DataBase.CREDITO_WEB);
          
        }

        public static List<ProspectoBE> ActualizarProspecto(ProspectoBE oProspecto)
        {
            List<ProspectoBE> lstProspecto = new List<ProspectoBE>();
            Comando cmd = new Comando();
            cmd.CommandName = "PRC_ActualizarProspecto";
            cmd.AddParameter("@Accion", oProspecto.Accion);
            cmd.AddParameter("@NroProspecto", oProspecto.NroProspecto);
            cmd.AddParameter("@CodTipoPersona", oProspecto.CodTipoPersona);
            cmd.AddParameter("@CodProducto", oProspecto.CodProducto);            
            cmd.AddParameter("@TipoDocumentoTit", oProspecto.TipoDocumentoTit);
            cmd.AddParameter("@NroDocumentoTit", oProspecto.NroDocumentoTit);
            cmd.AddParameter("@ApePaternoTit", oProspecto.ApePaternoTit);
            cmd.AddParameter("@ApeMaternoTit", oProspecto.ApeMaternoTit);
            cmd.AddParameter("@Nombre1Tit", oProspecto.Nombre1Tit);
            cmd.AddParameter("@Nombre2Tit", oProspecto.Nombre2Tit);
            cmd.AddParameter("@TipoDocumentoCny", oProspecto.TipoDocumentoCny);
            cmd.AddParameter("@NroDocumentoCny", oProspecto.NroDocumentoCny);
            cmd.AddParameter("@ApePaternoCny", oProspecto.ApePaternoCny);
            cmd.AddParameter("@ApeMaternoCny", oProspecto.ApeMaternoCny);
            cmd.AddParameter("@Nombre1Cny", oProspecto.Nombre1Cny);
            cmd.AddParameter("@Nombre2Cny", oProspecto.Nombre2Cny);
            cmd.AddParameter("@NroRUC", oProspecto.NroRUC);
            cmd.AddParameter("@DesRazonSocial", oProspecto.DesRazonSocial);
            cmd.AddParameter("@TipoIntegranteAd1", oProspecto.TipoIntegranteAd1);
            cmd.AddParameter("@TipoDocumentoAd1", oProspecto.TipoDocumentoAd1);
            cmd.AddParameter("NroDocumentoAd1", oProspecto.NroDocumentoAd1);
            cmd.AddParameter("@ApePaternoAd1", oProspecto.ApePaternoAd1);
            cmd.AddParameter("@ApeMaternoAd1", oProspecto.ApeMaternoAd1);
            cmd.AddParameter("@Nombre1Ad1", oProspecto.Nombre1Ad1);
            cmd.AddParameter("@Nombre2Ad1", oProspecto.Nombre2Ad1);

            cmd.AddParameter("@TipoIntegranteAd2", oProspecto.TipoIntegranteAd2);
            cmd.AddParameter("@TipoDocumentoAd2", oProspecto.TipoDocumentoAd2);
            cmd.AddParameter("NroDocumentoAd2", oProspecto.NroDocumentoAd2);
            cmd.AddParameter("@ApePaternoAd2", oProspecto.ApePaternoAd2);
            cmd.AddParameter("@ApeMaternoAd2", oProspecto.ApeMaternoAd2);
            cmd.AddParameter("@Nombre1Ad2", oProspecto.Nombre1Ad2);
            cmd.AddParameter("@Nombre2Ad2", oProspecto.Nombre2Ad2);

            cmd.AddParameter("@TipoIntegranteAd3", oProspecto.TipoIntegranteAd3);
            cmd.AddParameter("@TipoDocumentoAd3", oProspecto.TipoDocumentoAd3);
            cmd.AddParameter("NroDocumentoAd3", oProspecto.NroDocumentoAd3);
            cmd.AddParameter("@ApePaternoAd3", oProspecto.ApePaternoAd3);
            cmd.AddParameter("@ApeMaternoAd3", oProspecto.ApeMaternoAd3);
            cmd.AddParameter("@Nombre1Ad3", oProspecto.Nombre1Ad3);
            cmd.AddParameter("@Nombre2Ad3", oProspecto.Nombre2Ad3);

            lstProspecto = (List<ProspectoBE>)ElManager.EjecutarStore<ProspectoBE>(cmd, DataBase.CREDITO_WEB);
            return lstProspecto;            
        }

        public static List<ApruebaBE> ObtenerListaSolicitudesXAprobar(ApruebaBE oAprueba)
        {
            List<ApruebaBE> lstAprueba = new List<ApruebaBE>();
            Comando cmd = new Comando();
            cmd.CommandName = "PRC_ObtenerListaSolicitudesXAprobar";
            cmd.AddParameter("@TipoBusqueda", oAprueba.TipoBusqueda);
            cmd.AddParameter("@TipoDocumento", oAprueba.TipoBusqueda);
            cmd.AddParameter("@NroDocumento", oAprueba.NumeroDocumento);
            cmd.AddParameter("@ApellidoPaterno", oAprueba.ApellidoPaterno);
            cmd.AddParameter("@ApellidoMaterno", oAprueba.ApellidoMaterno);
            cmd.AddParameter("@Nombres", oAprueba.Nombres);
            lstAprueba = (List<ApruebaBE>)ElManager.EjecutarStore<ApruebaBE>(cmd, DataBase.CREDITO_WEB);
            return lstAprueba;
        }

        public static List<ApruebaBE> ObtenerListaResultadoReglas(ApruebaBE oAprueba)
        {
            List<ApruebaBE> lst = new List<ApruebaBE>();
            Comando cmd = new Comando();
            cmd.CommandName = "PRC_ObtenerListaResultadoReglas";
            cmd.AddParameter("@TipoOrigen", 1);
            cmd.AddParameter("@NumeroSolicitud", oAprueba.NumeroSolicitud);            
            lst = (List<ApruebaBE>)ElManager.EjecutarStore<ApruebaBE>(cmd, DataBase.CREDITO_WEB);
            return lst;
        }

        public static void AprobarSolicitudCredito(ApruebaBE oAprueba)
        {
            
            Comando cmd = new Comando();
            cmd.CommandName = "PRC_AprobarSolicitudCredito";
            cmd.AddParameter("@Accion", 1);
            cmd.AddParameter("@NumeroSolicitud", oAprueba.NumeroSolicitud);
            cmd.AddParameter("@Moneda", oAprueba.Moneda);
            cmd.AddParameter("@Importe", oAprueba.ImporteCredito);
            cmd.AddParameter("@Plazo", oAprueba.Plazo);
            cmd.AddParameter("@Tasa", oAprueba.Tasa);
            cmd.AddParameter("@ValorCuota", oAprueba.ValorCuota);
            cmd.AddParameter("@Observacion", oAprueba.Observacion);
            cmd.AddParameter("@CodigoUsuario", 1);
            ElManager.EjecutarStore<ApruebaBE>(cmd, DataBase.CREDITO_WEB);
            
        }



    }
}
